Video encoders are designed to output a stream of information that is compliant with a particular video compression standard (such as VC-1, H.264, MPEG-2, and others). The way in which the out put stream is produced is not dictated by any standard. Therefore, video encoders have been continually refined to produce high quality results with low overhead (for example, low bit-rate) within the constraints imposed available by hardware and software tools. Conventional video encoders perform motion estimation by searching each macroblock in a frame, determining its motion vector, cost in bits, etc., performing a subtraction, and getting a residual. A macroblock is typically 16×16 pixels. The residual is what is encoded to represent the image. Typical video encoders are slow when they produce very high quality video. One of the reasons for this is that many brute force computations are performed, attempting many solutions and picking the best one. It is desirable to have a video encoding method that is optimized to reduce the complexity of computations cycles while still attaining very high quality video.
The drawings represent aspects of various embodiments for the purpose of disclosing the invention as claimed, but are not intended to be limiting in any way.